#pragma once
#include "vec3.h"
#include "GlobalDefine.h"

namespace mray{

	struct World;
	struct Ray;
	struct Result;
	struct Fragment;

	struct BaseTracer{
		//alpha treacer
		BaseTracer(World* pWorld):m_pWorld(pWorld){}

		virtual vec3 Trace(Ray& ray, int depth)const = 0;
	protected:
		World* m_pWorld;
	};

	struct NormalTracer : public BaseTracer{
		NormalTracer(World* pWorld):BaseTracer(pWorld){}

		virtual vec3 Trace(Ray& ray, int depth)const override;
	};

	struct PathTracer : public BaseTracer{
		PathTracer(World* pWorld):BaseTracer(pWorld){}

		virtual vec3 Trace(Ray& ray, int depth)const override;
	};

}